Sensors Calibration

calibration

The calibration package

calibration is a package to estimate the extrinsic parameters that describes the geometric transformation (rotation and translation) of a set of sensors with respect to a global frame using a ball as target. The approach used to obtain the calibration between all the devices is achieved in three stages:

  1. each sensor must detect the center of the ball;
  2. the ball is placed in motion in front of the sensors allowing them to detect its center along sucessive positions, creating at the same time a point cloud of detected centers for each of the sensors;
  3. one sensors is chosen as reference and the remaindet are calibrated relatively to it one at a time by using an algorithm available on the Point Cloud Library( PCL).

Hardware

This package supports the following sensors:

Program usage

This package is dependent of other packages and libraries:

How to use?

Assuming that will be used all the sensors supported, first is necessary to launch the packages that publish the point clouds acquired from the sensors (Sick LD-MRS, Sick LMS151 and SwissRanger). The commands to run the nodes for each sensor (not necessarily in this order) are the follow:

Then, the nodes for the ball center detection are launched. These are the commands:

Finally is launched the calibration node to compute the geometric transformation between sensors. This is the command:

The resulting transformations are saved in text files on the calib_results folder.

Observations

Since the calculation of the ball center coordinates is dependent of the ball diameter, in case of use a ball with a diameter different from 107 cm, the parameter "#define BALL_DIAMETER" in the common_functions.h file need to be changed to the new ball diameter.

All the next observations are related to the calibration.cpp file. The current code is prepared for the calibration of the two Sick LMS151, the Sick LD-MRS400001 and the stereo system. Depending on the sensors used on the calibration, the condition marked on the image below needs to be changed manually, by removing or adding the condition about the sensors being used. This condition is to guarantee that the ball is detected by all the sensors.

image1.png

The variables marked on the image below are the distance between the corrent center of the ball detected and the previous in each sensors. Depending of the sensors being used, those variables need to be commented or uncomented. For example, if the stereo system is being used the variable d_stereo stays uncommented, otherwise is commented.

image2.png

Also the variable number_of_sensors (line 226) may need to be changed ( the explanation is commented on the code). Then, the variable diff_dist_mean is the square mean of the difference between the distances calculated previously (d_stereo, d_ldmrs,...) and the distance of the reference sensor (for example d_lms1). Depending on the sensor chosen as reference, the equacion may need to change.

Finally, the function estimateTransformation() estimates the geometric transformation between sensors pairs. If some sensor is not being used, and some call of that function contains a sensor not being used, that line should be commented or removed. The image below shows the function called several times for the calibration of several sensors.

image3.png


calibration
Author(s): Marcelo Pereira
autogenerated on Tue Mar 1 2016 14:19:55